package com.wcl.hencodertest.test07_drawing;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.text.StaticLayout;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.view.View;

import androidx.annotation.Nullable;

import com.blankj.utilcode.util.ConvertUtils;
import com.wcl.hencodertest.R;

/**
 * @项目名： HenCoderTest
 * @包名： com.wcl.hencodertest.test07_drawing
 * @文件名: ImageTextView
 * @创建者: kilin
 * @创建时间: 2020/4/17 16:39
 * @描述： TODO
 */
public class ImageTextView extends View {

    private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

    private TextPaint textPaint = new TextPaint();
    private Paint.FontMetrics mFontMetrics = new Paint.FontMetrics();
    public static final String TEXT =
            "这里显示的是您访问国内站点的IP，通常是您本机或路由器的IP。没有公网IP的话，则是公共出口IP。全局状态下，则显示代理服务器IP。" +
                    "这里显示的是您访问国内站点的IP，通常是您本机或路由器的IP。没有公网IP的话，则是公共出口IP。全局状态下，则显示代理服务器IP。" +
                    "这里显示的是您访问国内站点的IP，通常是您本机或路由器的IP。没有公网IP的话，则是公共出口IP。全局状态下，则显示代理服务器IP。" +
                    "这里显示的是您访问国内站点的IP，通常是您本机或路由器的IP。没有公网IP的话，则是公共出口IP。全局状态下，则显示代理服务器IP。" +
                    "这里显示的是您访问国内站点的IP，通常是您本机或路由器的IP。没有公网IP的话，则是公共出口IP。全局状态下，则显示代理服务器IP。" +
                    "这里显示的是您访问国内站点的IP，通常是您本机或路由器的IP。没有公网IP的话，则是公共出口IP。全局状态下，则显示代理服务器IP。" +
                    "这里显示的是您访问国内站点的IP，通常是您本机或路由器的IP。没有公网IP的话，则是公共出口IP。全局状态下，则显示代理服务器IP。" +
                    "这里显示的是您访问国内站点的IP，通常是您本机或路由器的IP。没有公网IP的话，则是公共出口IP。全局状态下，则显示代理服务器IP。" +
                    "这里显示的是您访问国内站点的IP，通常是您本机或路由器的IP。没有公网IP的话，则是公共出口IP。全局状态下，则显示代理服务器IP。" +
                    "这里显示的是您访问国内站点的IP，通常是您本机或路由器的IP。没有公网IP的话，则是公共出口IP。全局状态下，则显示代理服务器IP。" +
                    "这里显示的是您访问国内站点的IP，通常是您本机或路由器的IP。没有公网IP的话，则是公共出口IP。全局状态下，则显示代理服务器IP。";

    StaticLayout staticLayout;

    float[] floats = new float[]{};

    public static final int BITMAP_WIDTH = ConvertUtils.dp2px(100);

    public static final int BITMAP_MARGIN_TOP = ConvertUtils.dp2px(100);

    public static final int BITMAP_MARGIN_LEFT = ConvertUtils.dp2px(150);
    /**
     * bitmap旁边留白多少
     */
    private float BITMAP_MARGIN = ConvertUtils.dp2px(5);
    ;

    /**
     * 是否是图片下方的一行文字
     */
    private boolean isBitmapBootomLine = false;

    public ImageTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    {
//        textPaint.setTextSize(40);
        paint.setTextSize(50);
        paint.getFontMetrics(mFontMetrics);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
//        staticLayout = new StaticLayout(TEXT, textPaint, getWidth(), Layout.Alignment.ALIGN_NORMAL, 1, 0, false);
//        staticLayout.draw(canvas);


        float textTop = -mFontMetrics.top;

        canvas.drawBitmap(getAvatar(BITMAP_WIDTH),
                BITMAP_MARGIN_LEFT,
                BITMAP_MARGIN_TOP,
                paint);

        int startIndex = 0;
        while (startIndex < TEXT.length()) {
            float textBootom = textTop + paint.getFontSpacing();
            if (textTop > BITMAP_MARGIN_TOP && textTop < BITMAP_MARGIN_TOP + BITMAP_WIDTH) {//文字的顶部Y坐标大于图片顶部的Y坐标,并且文字的顶部Y坐标小于图片底部的Y坐标
                int count = paint.breakText(TEXT, startIndex, TEXT.length(), true, BITMAP_MARGIN_LEFT - BITMAP_MARGIN, floats);//在图片左边空白部分的文字个数
                canvas.drawText(TEXT, startIndex, startIndex + count, 0, textTop, paint);
                startIndex += count;

                count = paint.breakText(TEXT, startIndex, TEXT.length(), true,
                        getWidth() - BITMAP_MARGIN_LEFT - BITMAP_WIDTH - BITMAP_MARGIN, floats);//在图片右边空白部分的文字个数
                canvas.drawText(TEXT, startIndex, startIndex + count, BITMAP_MARGIN_LEFT + BITMAP_WIDTH + BITMAP_MARGIN, textTop, paint);
                startIndex += count;

                isBitmapBootomLine = true;

            } else if (textBootom > BITMAP_MARGIN_TOP
                    && textBootom < BITMAP_MARGIN_TOP + BITMAP_WIDTH) {//文字的底部Y坐标大于图片顶部的Y坐标,并且文字的底部Y坐标小于图片底部的Y坐标
                int count = paint.breakText(TEXT, startIndex, TEXT.length(), true, BITMAP_MARGIN_LEFT - BITMAP_MARGIN, floats);//在图片左边空白部分的文字个数
                canvas.drawText(TEXT, startIndex, startIndex + count, 0, textTop, paint);
                startIndex += count;

                count = paint.breakText(TEXT, startIndex, TEXT.length(), true,
                        getWidth() - BITMAP_MARGIN_LEFT - BITMAP_WIDTH - BITMAP_MARGIN, floats);//在图片右边空白部分的文字个数
                canvas.drawText(TEXT, startIndex, startIndex + count, BITMAP_MARGIN_LEFT + BITMAP_WIDTH + BITMAP_MARGIN, textTop, paint);
                startIndex += count;
                isBitmapBootomLine = true;
            } else {
                int count = paint.breakText(TEXT, startIndex, TEXT.length(), true, getWidth(), floats);
                if (isBitmapBootomLine) {
                    textTop += BITMAP_MARGIN;
                    canvas.drawText(TEXT, startIndex, startIndex + count, 0, textTop, paint);
                    isBitmapBootomLine = false;
                } else {
                    canvas.drawText(TEXT, startIndex, startIndex + count, 0, textTop, paint);
                }

                startIndex += count;
            }
            textTop += paint.getFontSpacing();

        }
    }


    Bitmap getAvatar(int width) {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeResource(getResources(), R.drawable.pic, options);
        options.inJustDecodeBounds = false;
        options.inDensity = options.outWidth;
        options.inTargetDensity = width;
        return BitmapFactory.decodeResource(getResources(), R.drawable.pic, options);
    }
}

